|
(*~\Глагол\Отделы\Поле~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**) ОТДЕЛ ПолеЗамена;
(*============================================================================*
* НАЗНАЧЕНИЕ: вывод вопроса о замене
*============================================================================*)
ИСПОЛЬЗУЕТ
Надел,
Поле,
Подложка,
Записка,
Черта,
Кнопка,
Цепь ИЗ "..\Иное\",
Ввод ИЗ "..\Обмен\";
ПОСТ
(* действия кнопок и состояние поля *)
сЗаменить- = 1;
сВсе- = 2;
сПропустить-= 3;
(******************************************************************************)
ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка);
(* получить и обработать управляющие послания *)
УКАЗ
ДЛЯ посылка ВИДА
| Ввод.ОтКлавиш:
ЕСЛИ посылка.код = 1BH ТО (* Esc *)
поле.состояние:=Поле.сОтмена;
посылка.код:=0
КОН
| Кнопка.Посылка:
поле.состояние:=посылка.кнопка.действие
ИНАЧЕ
КОН
КОН Приём;
(******************************************************************************)
ЗАДАЧА Выполнить-():ЦЕЛ; (* состояние поля после отработки *)
(* Цель: осуществить вывод вопроса *)
(******************************************************************************)
(* До: *)
окружение:Поле.Доступ; (* окружающее поле *)
образец-:ЦЕПЬ; (* искомая цепочка *)
замена-:ЦЕПЬ (* новая цепочка *)
(* Ответ: *)
(******************************************************************************)
ПОСТ
(* цепочки для кнопок *)
цЗаменить ="[ ~Заменить ]";
цВсе ="[ ~Все ]";
цПропустить ="[ ~Пропустить ]";
цОтмена ="[ Отмена ]";
длЗаменить =ДЛИНА(цЗаменить)-1;
длВсе =ДЛИНА(цВсе)-1;
длПропустить=ДЛИНА(цПропустить)-1;
длОтмена =ДЛИНА(цОтмена);
промежуток =2; (* промежуток между кнопками *)
колонок=70;
занято=длЗаменить + промежуток + длВсе +
промежуток + длПропустить +
промежуток + длОтмена;
позЗаменить=1 + ((колонок-занято-1) ДЕЛИТЬ 2);
позВсе=позЗаменить+длЗаменить+промежуток;
позПропустить=позВсе+длВсе+промежуток;
позОтмена=позПропустить+длПропустить+промежуток;
позНа=1 + ((колонок-2-1) ДЕЛИТЬ 2);
ПЕР
поле:Поле.Доступ;
подложка:Подложка.Доступ;
черта:Черта.Доступ;
зОбразец,зНа,зЗамена:Записка.Доступ;
кнЗаменить,кнВсе,кнПропустить,кнОтмена:Кнопка.Доступ;
цОбразец,цЗамена:ЦЕПЬ[128];
позОбразец,позЗамена:ЦЕЛ;
УКАЗ
цОбразец:='"';
Цепь.Добавить(цОбразец,образец);
Цепь.ДобавитьЗнак(цОбразец,'"');
цЗамена:='"';
Цепь.Добавить(цЗамена,замена);
Цепь.ДобавитьЗнак(цЗамена,'"');
позОбразец:=1+((колонок - ДЛИНА(цОбразец) -1) ДЕЛИТЬ 2);
позЗамена :=1+((колонок - ДЛИНА(цЗамена) -1) ДЕЛИТЬ 2);
(* создаём поле *)
поле:=Поле.Создать(0,0,7,колонок,окружение,ВКЛ,Приём);
(* создаём наделы *)
подложка:=
Подложка.Создать(0,0,0,0,"Замена");
зОбразец:=
Записка.Создать (1,позОбразец,1,-2,цОбразец);
зНа:=
Записка.Создать (2,позНа,1,-2,'на');
зЗамена:=
Записка.Создать (3,позЗамена,1,-2,цЗамена);
черта:=
Черта.Создать (4,0,1,0);
кнЗаменить:=
Кнопка.Создать (5,позЗаменить,цЗаменить,сЗаменить,ВКЛ);
кнВсе:=
Кнопка.Создать (5,позВсе,цВсе,сВсе,ВКЛ);
кнПропустить:=
Кнопка.Создать (5,позПропустить,цПропустить,сПропустить,ВКЛ);
кнОтмена:=
Кнопка.Создать (5,позОтмена,цОтмена,Поле.сОтмена,ВКЛ);
(* добавляем наделы в порядке отрисовки и получения ввода *)
Поле.ДобавитьНадел(поле,подложка);
Поле.ДобавитьНадел(поле,зОбразец);
Поле.ДобавитьНадел(поле,зНа);
Поле.ДобавитьНадел(поле,зЗамена);
Поле.ДобавитьНадел(поле,черта);
Поле.ДобавитьНадел(поле,кнЗаменить);
Поле.ДобавитьНадел(поле,кнВсе);
Поле.ДобавитьНадел(поле,кнПропустить);
Поле.ДобавитьНадел(поле,кнОтмена);
(* основная работа *)
Поле.Рисовать(поле);
ПОВТОРЯТЬ
Поле.Проверить(поле)
ДО поле.состояние # Поле.сРабота;
(* восстанавливаем окружение *)
Поле.Рисовать(окружение);
ВОЗВРАТ поле.состояние
КОН Выполнить;
КОН ПолеЗамена.
|
|